import board
from referee import Referee
from ai import Ai
from gui import Gui

class Game:
    def __init__(self,jugador1,jugador2,nivel=Ai.FACIL):
        self.__gui = Gui()
        self.__tablero = self.__gui.init_board().get_board()
        #Iniciliazo la inteligencia para la PC
        self.__pc = Ai(nivel)
        #Inicializo un vector de jugadores   
        self.__jugadores = [jugador1,jugador2]    
        
    def get_turn(self):
        return self.__jugadores[self.__turno] 
    
    def set_turn(self,jugador):
        if jugador.equal(self.__jugadores[0]):
            self.__turno = 0
        elif jugador.equal(self.__jugadores[1]):
            self.__turno = 1
        else:
            raise Exception("No se pudo asignar el turno, el jugador no existe! (Game Class)")
    
    def __next_turn(self):
        color = self.__jugadores[self.__turno].get_color()
        #Veo si hay jugada posible para el turno siguiente, es decir si era Blanco para el Negro
        if Referee.is_at_least_one_move(color*-1, self.__tablero):                
            return True        
        else:
            return False
    
    def change_turn(self):
        if self.__next_turn():
            self.__turno = (self.__turno - 1) * -1
            return True
        else:
            return False
    
    def is_over(self):
        if Referee.is_at_least_one_move(board.BLANCO, self.__tablero):
            return False
        elif Referee.is_at_least_one_move(board.NEGRO, self.__tablero):
            return False
        else:
            return True
    
    def play_pc(self):
        return self.__make_a_move()
    
    def __make_a_move(self):
        if self.__pc.play(self.__tablero,self.__jugadores[self.__turno].get_color()):            
            self.__ultima_jugada_pc = self.__pc.get_last_move()
            return True
        else:
            return False
    
    def get_final_result(self):
        if self.__tablero.get_can_fichas_blancas() > self.__tablero.get_can_fichas_negras():
            return 'Termino el juego, Gano Blanco!'
        elif self.__tablero.get_can_fichas_blancas() < self.__tablero.get_can_fichas_negras():
            return 'Termino el juego, Gano Negro!'
        else:
            return 'Empate'
    
    def get_last_pc_move(self):
        return self.__ultima_jugada_pc
    
    def play(self):
        self.__gui.run(self)
            